home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / c / cl_7_bug.zip / BUG_2.ERR < prev    next >
Text File  |  1992-10-10  |  10KB  |  374 lines

  1. ;    Static Name Aliases
  2. ;
  3. ;    $S306_stack    EQU    stack
  4.     TITLE   bug_2.c
  5.     .8087
  6. INCLUDELIB      SLIBCE
  7. INCLUDELIB    OLDNAMES.LIB
  8. _TEXT    SEGMENT  WORD PUBLIC 'CODE'
  9. _TEXT    ENDS
  10. _DATA    SEGMENT  WORD PUBLIC 'DATA'
  11. _DATA    ENDS
  12. CONST    SEGMENT  WORD PUBLIC 'CONST'
  13. CONST    ENDS
  14. _BSS    SEGMENT  WORD PUBLIC 'BSS'
  15. _BSS    ENDS
  16. DGROUP    GROUP    CONST, _BSS, _DATA
  17.     ASSUME DS: DGROUP, SS: DGROUP
  18. EXTRN    __acrtused:ABS
  19. EXTRN    _puts:NEAR
  20. EXTRN    _strchr:NEAR
  21. _DATA      SEGMENT
  22. $SG316    DB    '#t',  00H
  23. $SG318    DB    'The program works',  00H
  24. $SG320    DB    'Error: -t switch dosen''t work',  00H
  25. _DATA      ENDS
  26. _BSS      SEGMENT
  27. $S306_stack    DW 01H DUP (?)
  28. _BSS      ENDS
  29. _TEXT      SEGMENT
  30.     ASSUME    CS: _TEXT
  31.     PUBLIC    _main
  32. _main    PROC NEAR
  33. ;|*** /* Test if switch: Some switch-options are optimized to void */
  34. ;|*** 
  35. ;|*** #include <stdio.h>
  36. ;|*** #include <string.h>
  37. ;|*** 
  38. ;|*** struct state {
  39. ;|***     int flags;                /* Current state flags */
  40. ;|*** };
  41. ;|*** 
  42. ;|*** static struct state stack;    /* Linked list of stacked states */
  43. ;|*** 
  44. ;|*** #define TRACE_ON          000001  /* Trace enabled */
  45. ;|*** #define DEBUG_ON          000002  /* Debug enabled */
  46. ;|*** #define FILE_ON              000004  /* File name print enabled */
  47. ;|*** #define LINE_ON              000010  /* Line number print enabled */
  48. ;|*** #define DEPTH_ON          000020  /* Function nest level print enabled */
  49. ;|*** #define PROCESS_ON          000040  /* Process name print enabled */
  50. ;|*** #define NUMBER_ON          000100  /* Number each line of output */
  51. ;|*** #define SANITY_CHECK_ON          000200  /* Check safemalloc on DBUG_ENTER */
  52. ;|*** #define FLUSH_ON_WRITE          000400  /* Flush on every write */
  53. ;|*** 
  54. ;|*** void _db_push_ (char *control);
  55. ;|*** 
  56. ;|*** int main(int argc,char *argv[])
  57. ;|*** {
  58. ; Line 25
  59. ;    argc = 4
  60. ;    argv = 6
  61. ;|***   _db_push_ ("#t");
  62. ; Line 26
  63.     *** 000000    b8 00 00         mov    ax,OFFSET DGROUP:$SG316
  64.     *** 000003    50             push    ax
  65.     *** 000004    e8 00 00         call    __db_push_
  66.     *** 000007    83 c4 02         add    sp,2
  67. ;|***   if (stack.flags & TRACE_ON)
  68. ; Line 27
  69.     *** 00000a    f6 06 00 00 01         test    BYTE PTR $S306_stack,1
  70.     *** 00000f    74 05             je    $I317
  71. ;|***     puts("The program works");
  72. ; Line 28
  73.     *** 000011    b8 03 00         mov    ax,OFFSET DGROUP:$SG318
  74.     *** 000014    eb 03             jmp    SHORT $L344
  75.                     $I317:
  76. ;|***   else
  77. ;|***     puts("Error: -t switch dosen't work");
  78. ; Line 30
  79.     *** 000016    b8 15 00         mov    ax,OFFSET DGROUP:$SG320
  80.                     $L344:
  81.     *** 000019    50             push    ax
  82.     *** 00001a    e8 00 00         call    _puts
  83.     *** 00001d    83 c4 02         add    sp,2
  84. ;|***   return 0;
  85. ; Line 31
  86.     *** 000020    33 c0             xor    ax,ax
  87. ;|*** }
  88. ; Line 32
  89.     *** 000022    c3             ret    
  90.     *** 000023    90             nop    
  91.  
  92. _main    ENDP
  93.     PUBLIC    __db_push_
  94. __db_push_    PROC NEAR
  95. ;|*** 
  96. ;|*** 
  97. ;|*** void _db_push_ (control)
  98. ;|*** char *control;
  99. ;|*** {
  100. ; Line 37
  101.     *** 000024    55             push    bp
  102.     *** 000025    8b ec             mov    bp,sp
  103.     *** 000027    56             push    si
  104. ;    control = 4
  105. ;    register si = scan
  106. ;    new_str = -2
  107. ;|***   register char *scan;
  108. ;|***   char *new_str;
  109. ;|*** 
  110. ;|***     for (scan=control; scan != NULL; scan = strchr(scan,':'))
  111. ; Line 41
  112.     *** 000028    8b 76 04         mov    si,WORD PTR [bp+4]    ;control
  113.     *** 00002b    0b f6             or    si,si
  114.     *** 00002d    75 03             jne    $JCC45
  115.     *** 00002f    e9 b7 00         jmp    $FB327
  116.                     $JCC45:
  117.                     $F325:
  118. ;|***     {
  119. ;|***           switch (*(++scan)) {
  120. ; Line 43
  121.     *** 000032    46             inc    si
  122.     *** 000033    8a 04             mov    al,BYTE PTR [si]
  123.     *** 000035    98             cbw    
  124. ;|***           case 'd':
  125. ;|***           case 'D':
  126. ;|***                   stack.flags |= DEBUG_ON;
  127. ;|***                   break;
  128. ;|***           case 'f':
  129. ;|***           case 'F':
  130. ;|***                   stack.flags |= FILE_ON;
  131. ;|***                   break;
  132. ;|***           case 'L':
  133. ;|***                   stack.flags |= LINE_ON;
  134. ;|***                   break;
  135. ;|***           case 'n':
  136. ;|***                   stack.flags |= DEPTH_ON;
  137. ;|***                   break;
  138. ;|***           case 'N':
  139. ;|***                   stack.flags |= NUMBER_ON;
  140. ;|***                   break;
  141. ;|***           case 'O':
  142. ;|***           case 'o':
  143. ;|***                   stack.flags |= FLUSH_ON_WRITE;
  144. ;|***                   break;
  145. ;|***           case 'p':
  146. ;|***           case 'P':
  147. ;|***           case 'r':
  148. ;|***                   stack.flags |= PROCESS_ON;
  149. ;|***                   break;
  150. ;|***           case 't':
  151. ;|***                   stack.flags |= TRACE_ON;
  152. ;|***                   break;
  153. ;|***           case 'S':
  154. ;|***                   stack.flags |= SANITY_CHECK_ON;
  155. ;|***                   break;
  156. ;|***           }
  157. ; Line 76
  158.     *** 000036    3d 6f 00         cmp    ax,111    ;006fH
  159.     *** 000039    74 75             je    $SC337
  160.     *** 00003b    76 03             jbe    $JCC59
  161. ; MONTY 't' = \116 is skipped here. CL thinks that 'o' is the last option
  162.     *** 00003d    e9 95 00         jmp    $FC326
  163.                     $JCC59:
  164.     *** 000040    3c 4f             cmp    al,79    ;004fH
  165.     *** 000042    74 6c             je    $SC337
  166.     *** 000044    3c 53             cmp    al,83    ;0053H
  167.     *** 000046    74 78             je    $SC340
  168.     *** 000048    2d 44 00         sub    ax,68    ;0044H
  169.     *** 00004b    a8 01             test    al,1
  170.     *** 00004d    74 03             je    $JCC77
  171.     *** 00004f    e9 83 00         jmp    $FC326
  172.                     $JCC77:
  173.     *** 000052    3d 30 00         cmp    ax,48    ;0030H
  174.     *** 000055    77 7e             ja    $FC326
  175.     *** 000057    93             xchg    ax,bx
  176.     *** 000058    2e ff a7 5e 00         jmp    WORD PTR cs:$L343[bx]
  177.     *** 00005d    90             nop    
  178.                     $L343:
  179.     *** 00005e    90 00                 DW    $SC332
  180.     *** 000060    98 00                 DW    $SC333
  181.     *** 000062    d5 00                 DW    $FC326
  182.     *** 000064    d5 00                 DW    $FC326
  183.     *** 000066    a0 00                 DW    $SC334
  184.     *** 000068    a8 00                 DW    $SC336
  185.     *** 00006a    b8 00                 DW    $SC338
  186.     *** 00006c    d5 00                 DW    $FC326
  187.     *** 00006e    d5 00                 DW    $FC326
  188.     *** 000070    d5 00                 DW    $FC326
  189.     *** 000072    d5 00                 DW    $FC326
  190.     *** 000074    d5 00                 DW    $FC326
  191.     *** 000076    d5 00                 DW    $FC326
  192.     *** 000078    d5 00                 DW    $FC326
  193.     *** 00007a    d5 00                 DW    $FC326
  194.     *** 00007c    d5 00                 DW    $FC326
  195.     *** 00007e    90 00                 DW    $SC332
  196.     *** 000080    98 00                 DW    $SC333
  197.     *** 000082    d5 00                 DW    $FC326
  198.     *** 000084    d5 00                 DW    $FC326
  199.     *** 000086    d5 00                 DW    $FC326
  200.     *** 000088    c8 00                 DW    $SC335
  201.     *** 00008a    b8 00                 DW    $SC338
  202.     *** 00008c    b8 00                 DW    $SC338
  203.     *** 00008e    d0 00                 DW    $SC339
  204. ;|***           case 'd':
  205. ; Line 44
  206.                     $SC332:
  207. ;|***           case 'D':
  208. ;|***                   stack.flags |= DEBUG_ON;
  209. ; Line 46
  210.     *** 000090    80 0e 00 00 02         or    BYTE PTR $S306_stack,2
  211. ;|***                   break;
  212. ; Line 47
  213.     *** 000095    eb 3e             jmp    SHORT $FC326
  214.     *** 000097    90             nop    
  215. ;|***           case 'f':
  216. ; Line 48
  217.                     $SC333:
  218. ;|***           case 'F':
  219. ;|***                   stack.flags |= FILE_ON;
  220. ; Line 50
  221.     *** 000098    80 0e 00 00 04         or    BYTE PTR $S306_stack,4
  222. ;|***                   break;
  223. ; Line 51
  224.     *** 00009d    eb 36             jmp    SHORT $FC326
  225.     *** 00009f    90             nop    
  226. ;|***           case 'L':
  227. ; Line 52
  228.                     $SC334:
  229. ;|***                   stack.flags |= LINE_ON;
  230. ; Line 53
  231.     *** 0000a0    80 0e 00 00 08         or    BYTE PTR $S306_stack,8
  232. ;|***                   break;
  233. ; Line 54
  234.     *** 0000a5    eb 2e             jmp    SHORT $FC326
  235.     *** 0000a7    90             nop    
  236. ;|***           case 'n':
  237. ;|***                   stack.flags |= DEPTH_ON;
  238. ;|***                   break;
  239. ;|***           case 'N':
  240. ; Line 58
  241.                     $SC336:
  242. ;|***                   stack.flags |= NUMBER_ON;
  243. ; Line 59
  244.     *** 0000a8    80 0e 00 00 40         or    BYTE PTR $S306_stack,64    ;0040H
  245. ;|***                   break;
  246. ; Line 60
  247.     *** 0000ad    eb 26             jmp    SHORT $FC326
  248.     *** 0000af    90             nop    
  249. ;|***           case 'O':
  250. ; Line 61
  251.                     $SC337:
  252. ;|***           case 'o':
  253. ;|***                   stack.flags |= FLUSH_ON_WRITE;
  254. ; Line 63
  255.     *** 0000b0    80 0e 01 00 01         or    BYTE PTR $S306_stack+1,1
  256. ;|***                   break;
  257. ; Line 64
  258.     *** 0000b5    eb 1e             jmp    SHORT $FC326
  259.     *** 0000b7    90             nop    
  260. ;|***           case 'p':
  261. ; Line 65
  262.                     $SC338:
  263. ;|***           case 'P':
  264. ;|***           case 'r':
  265. ;|***                   stack.flags |= PROCESS_ON;
  266. ; Line 68
  267.     *** 0000b8    80 0e 00 00 20         or    BYTE PTR $S306_stack,32    ;0020H
  268. ;|***                   break;
  269. ; Line 69
  270.     *** 0000bd    eb 16             jmp    SHORT $FC326
  271.     *** 0000bf    90             nop    
  272. ;|***           case 't':
  273. ;|***                   stack.flags |= TRACE_ON;
  274. ;|***                   break;
  275. ;|***           case 'S':
  276. ; Line 73
  277.                     $SC340:
  278. ;|***                   stack.flags |= SANITY_CHECK_ON;
  279. ; Line 74
  280.     *** 0000c0    80 0e 00 00 80         or    BYTE PTR $S306_stack,128    ;0080H
  281. ;|***                   break;
  282. ; Line 75
  283.     *** 0000c5    eb 0e             jmp    SHORT $FC326
  284.     *** 0000c7    90             nop    
  285. ;|***           case 'n':
  286. ; Line 55
  287.                     $SC335:
  288. ;|***                   stack.flags |= DEPTH_ON;
  289. ; Line 56
  290.     *** 0000c8    80 0e 00 00 10         or    BYTE PTR $S306_stack,16    ;0010H
  291. ;|***                   break;
  292. ; Line 57
  293.     *** 0000cd    eb 06             jmp    SHORT $FC326
  294.     *** 0000cf    90             nop    
  295. ;|